---
sidebar_position: 3
---
# Asp.NET Core限流中间件

## 限流相关配置内容

`appsettings.json`中的`IpRateLimit`配置

在.NET 6中，可以使用官方提供的AspNetCoreRateLimit库来实现限流功能。该库提供了丰富的配置选项和灵活的限流规则设置，可以轻松地对API进行限流管理。

### 安装AspNetCoreRateLimit库

首先需要在.NET 6项目中安装AspNetCoreRateLimit库。可以通过NuGet包管理器或者命令行工具来安装：

```bash
dotnet add package AspNetCoreRateLimit
```

### 配置限流规则

在`appsettings.json`中添加`IpRateLimit`配置，配置项包括：

- `EnableEndpointRateLimiting`：是否启用端点限流
- `StackBlockedRequests`：是否堆叠阻止的请求
- `RealIpHeader`：真实IP地址的请求头
- `ClientIdHeader`：客户端ID的请求头
- `HttpStatusCode`：限流时返回的HTTP状态码
- `QuotaExceededResponse`：超出配额时的响应配置
- `GeneralRules`：一般限流规则
- `ClientWhiteList`：客户端白名单

```json
"IpRateLimit":{
    "EnableEndpointRateLimiting": true,
    "StackBlockedRequests": false,
    "RealIpHeader": "X-Forwarded-For",
    "ClientIdHeader": "X-ClientId",
    "HttpStatusCode": 429, // 响应状态码
    "QuotaExceededResponse": {
      "Content-Type": "application/json",
      "Content": "请求太频繁了稍后再试" // 
    },
    "GeneralRules": [
      {
        "Endpoint": "*",  // 指定路由
        "Period": "1m",   // 1m(一分钟)
        "Limit": 60       // 次数
      }
    ],
    "ClientWhiteList": []
  }
```

### 添加限流中间件

在`Program.cs`中配置限流中间件，将限流配置绑定到`IpRateLimitOptions`，并添加限流中间件：

```csharp
builder.Services.Configure<IpRateLimitOptions>(builder.Configuration.GetSection("IpRateLimit"));
builder.Services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
builder.Services.AddInMemoryRateLimiting();

var app = builder.Build();
app.UseIpRateLimiting();
```
